#!/bin/bash

#author: Sen Du
#email: dusen.me@gmail.com
#created: 2024-04-13 20:00:00
#updated: 2025-10-08 10:50:00

### 压缩后，源文件直接删除 ###

set -e 

#搜索路径
FILEPATHS=('/Users/dusen/Editor/temp')

# CPU 控制参数
MAX_THREADS=8        # 限制使用 8 个线程（10核CPU的80%）
NICE_LEVEL=10        # 低优先级运行

function main() {    

    ##1.处理多个目录的视频
    for FILEPATH in ${FILEPATHS[@]}; do

        ##2.根据目录，扫描所有后缀是 .mp4 .MP4 .MTS .mov 格式的视频，而且视频要大于100MB（太小就不用压缩了）
        files=$(find "$FILEPATH" -type f -size +1M \
              \( -name "*.mp4" -o -name "*.MP4" -o -name "*.MTS" -o -name "*.mov" -o -name "*.MOV" \
              -o -name "*.avi" -o -name "*.mpg" -o -name "*.wmv" -o -name "*.mkv" -o -name "*.MKV" \
              -o -name "*.webm" -o -name "*.WEBM" -o -name "*.ts" -o -name "*.TS" -o -name "*.flv" \
              -o -name "*.FLV" -o -name "*.f4v" -o -name "*.F4V" -o -name "*.m2ts" -o -name "*.M2TS" \
              -o -name "*.mpeg" -o -name "*.MPEG" -o -name "*.rmvb" -o -name "*.RMVB" \) \
              | grep -v '1080p' | grep -v '🔒')
        
        for file in ${files[@]}; do
            newFile="${file%.*}.1080p.mp4"

            echo "[$(date +%Y%m%d%H%M%S)]reduce start..."
            echo "OldFile: $file"
            echo "newFile: $newFile"

            ##3.使用 ffmpeg 压缩视频（CPU 限制版）
            ## -threads 4: 限制使用 4 个CPU核心
            ## nice -n 10: 降低进程优先级，不影响其他任务
            if nice -n $NICE_LEVEL ffmpeg -i "$file" \
                -threads $MAX_THREADS \
                -c:v libx264 -preset veryfast -crf 24 \
                -vf "fps=24,scale='min(1920,iw):-2'" \
                -c:a aac -b:a 64k -ac 1 \
                -movflags +faststart \
                -y \
                "$newFile"; then
                
                ##4.压缩完成后，删除原视频，节约空间
                rm -f "$file"

                echo "[$(date +%Y%m%d%H%M%S)]reduce end."
            else
                echo "[$(date +%Y%m%d%H%M%S)]reduce failed!"
            fi

        done
    done
}

main
